#include <stdio.h>
#include <time.h>
#include <math.h>

clock_t start , stop;
double duration1,duration2,duration3;//秒

void primel1(long n)//找到不是素数的数
{
     start=clock();
     long i,j,count=1,num;//count为，不是素数的数
     if(n==2)
     {
     count=1;//1不是素数,2是素数
     }
     else
     {
     for(i=3;i<=n;i++)
     {
         for(j=2;j<i;j++)
         {
             if(i%j==0)
             {
                count++;
                break;
             }
         }
     }
     }
     num=n-count;
     stop=clock();
     duration1 = ((double)(stop-start))/CLOCKS_PER_SEC;
     printf("\n使用方法一计算出素数的个数是：%ld\n",num);//之前在这里输出（n-count）但是这一部实际上应该也是在时间内的
     printf("方法一的用时是%f秒\n\n",duration1);
} 

void primel2(long n)//除去偶数后，计算素数的个数
{
    start=0;
    stop=0;
    start=clock();
    long i,j,count=1;
    if(n==1)
    {
        count=0;
    }
    else if(n==2)
    {
        count=1;//1不是素数,2是素数
    } 
    else
    {
        for(i=3;i<=n;i=i+2)
            {
                int flag=1;//标记是否为素数
                for( j = 2; j < i ;j++) 
		        {
			        if(i % j ==0)
			        {
				        flag = 0;
				        break; 
                    }
			    }
				if (flag==1)
                count++;
		    }
        
    }   
    stop=clock();
    duration2 = ((double)(stop-start))/CLOCKS_PER_SEC;
    printf("使用方法二计算出素数的个数是：%ld\n",count);
    printf("方法二的用时是%f秒\n\n",duration2); 
}

void primel3(n)
{
    start=0;
    stop=0;
    start=clock();
    int i=3,j=0,count=1;
    if(n==1)
    {
        count=0;
    }
    else if(n==2)
    {
        count=1;
    }
    else
    {
        while(i<=n)
        {
            int flag=1;
            for(j=2;j<=sqrt(i);j++)
            {
                if(i%j==0)
                {
                    flag=0;
                    break;
                }
            }
            if(flag==1)
            {
                count++;
            }
            i=i+2;
        }
    }
    stop=clock();
    duration3 = ((double)(stop-start))/CLOCKS_PER_SEC;
    printf("使用方法三计算出素数的个数是：%d\n",count);
    printf("方法三的用时是%f秒\n\n",duration3); 
}

int main()
{
    long n;
    printf("请输入大于0的数\n");
    scanf("%ld",&n);
    primel1(n);
    primel2(n);
    primel3(n);
    return 0;
}